package com.alexgaoyh.MutiModule.Dubbo.RWSeperate.api.manager.sysman.sysmanResource.read;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.MutiModule.common.myPage.MyPageView;
import com.MutiModule.common.vo.TreeNode;
import com.MutiModule.common.vo.ZTreeNodes;
import com.MutiModule.common.vo.mybatis.pagination.Page;
import com.alexgaoyh.MutiModule.Dubbo.RWSeperate.persist.manager.sysman.sysmanResource.SysmanResource;
import com.alexgaoyh.MutiModule.Dubbo.RWSeperate.persist.manager.sysman.sysmanResource.SysmanResourceExample;

/**
 * SysmanResource 模块 读接口
 * @author alexgaoyh
 *
 */
public interface ISysmanResourceReadService {

	int countByExample(SysmanResourceExample example);

    List<SysmanResource> selectByExample(SysmanResourceExample example);

    SysmanResource selectByPrimaryKey(Long id);
    
    /**
     * 获取分页实体信息部分
     * @param exampleWithOutPage	参数传递，封装部分过滤参数
     * @param page	实体分页类部分
     * @return
     */
    MyPageView<SysmanResource> generateMyPageViewVO(SysmanResourceExample exampleWithOutPage, Page page);
    
    //alexgaoyh add begin
    /**
     * 根据资源id，获取treeNode 集合
     * @param id	资源id
     * @return
     */
    List<TreeNode> selectTreeNodeBySysmanResourceId(Long id);
    
    List<ZTreeNodes> selectAllResourceZTreeNode();
    
    /**
     * 通过主键id获取所有父级id集合parentIds
     * @param id	主键id
     * @param list	此主键id对应的所有parentIds集合
     * @return
     */
    List<Long> selectParentIdsByPrimaryKey(Long id, List<Long> list);
    
    /**
     * 根据 sys_sysmanuser 表中的用户userId ，获取此用户包含的所有权限资源
     * @param sys_sysmanuser 用户表中 userId 用户主键id
     * @return
     */
    List<SysmanResource> selectResourceListByUserId(Long userId);
    
    /**
     * 根据 sys_sysmanuser 表中的用户 userId, 获取此用户包含的所有权限资源，并转换为树形结构
     * @param userId sys_sysmanuser 用户表中 userId 用户主键id
     * @return
     */
    List<TreeNode> selectTreeNodeListByUserId(Long userId);
    
    /**
     * 获取到所有 parent_id 为 null 的 资源集合
     * @return
     */
    List<SysmanResource> selectSysmanResourceListByNullParentId();
    
    /**
     * 根据当前用户 ID 与 当前资源的主键 id，获取到 用户包含的 权限集合
     * @param userId
     * @param parentId
     * @return
     */
    List<SysmanResource> selectIconResourceByUserIdAndParentId(@Param("userId") Long userId, @Param("parentId") String parentId);
    
}
